package gson.reflect;

import com.google.gson.reflect.TypeToken;
import model.User;

import java.lang.reflect.Type;

public class TypeTokenExample {

    /**
     * 获取一个 TypeToken 对象，表示泛型类型。
     *
     */
    public <T> TypeToken<T> createTypeToken(Class<T> clazz) {
        return TypeToken.get(clazz);  // 使用 TypeToken.get 方法来创建 TypeToken
    }

    /**
     * 判断当前 TypeToken 是否等于另一个 TypeToken。
     *
     */
    public boolean equalsTypeToken(TypeToken<?> obj) {
        return createTypeToken(User.class).equals(obj);  // 明确指定 User.class
    }

    /**
     * 获取 TypeToken 对象，表示给定的 Class 类型。
     *
     */
    public <T> TypeToken<T> getTypeTokenFromClass(Class<T> type) {
        return TypeToken.get(type);  // 使用 TypeToken.get 来获取 TypeToken 对象
    }

    /**
     * 获取 TypeToken 对象，表示给定的 Type 类型。
     *
     */
    public TypeToken<?> getTypeTokenFromType(Type type) {
        return TypeToken.get(type);  // 使用 TypeToken.get 来获取 TypeToken 对象
    }

    /**
     * 判断当前 TypeToken 是否可以赋值给指定的 Class 类型。
     *
     */
    public boolean isAssignableFromClass(Class<?> cls) {
        return createTypeToken(User.class).isAssignableFrom(cls);  // 使用明确类型 User.class
    }

    /**
     * 判断当前 TypeToken 是否可以赋值给指定的 Type 类型。
     *
     */
    public boolean isAssignableFromType(Type from) {
        return createTypeToken(User.class).isAssignableFrom(from);  // 使用明确类型 User.class
    }

    /**
     * 判断当前 TypeToken 是否可以赋值给另一个 TypeToken。
     */
    public boolean isAssignableFromToken(TypeToken<?> token) {
        return createTypeToken(User.class).isAssignableFrom(token);  // 使用明确类型 User.class
    }
}
